package py.edu.ucsa.sisale.rest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBElement;

import py.edu.ucsa.sisale.dao.DaoFactory;
import py.edu.ucsa.sisale.dao.EstadoDAO;
import py.edu.ucsa.sisale.model.dto.Estado;

	
public class EstadoRs {
	
	  UriInfo uriInfo;
	  @Context
	  Request request;
	  String id;
	  public EstadoRs(UriInfo uriInfo, Request request, String id) {
	    this.uriInfo = uriInfo;
	    this.request = request;
	    this.id = id;
	  }
	  
	  //Application integration     
	  @GET
	  @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
	  public Estado getEstado() {
		  Estado estado = DaoFactory.getEstado().findById(Integer.parseInt(id));
	    if(estado==null)
	      throw new RuntimeException("Get: Todo with " + id +  " not found");
	    return estado;
	  }
	  
	  //Application integration     
	  @GET
	  @Produces(MediaType.TEXT_XML)
	  public Estado getEstadoHTML() {
		  Estado estado = DaoFactory.getEstado().findById(Integer.parseInt(id));
	    if(estado==null)
	      throw new RuntimeException("Get: Todo with " + id +  " not found");
	    return estado;
	  }
	  
	  @PUT
	  @Consumes(MediaType.APPLICATION_XML)
	  public Response putEstado(JAXBElement<Estado> estado) {
	    Estado est = estado.getValue();
	    return putAndGetResponse(est);
	  }
	  

	  @DELETE
	  public void deleteEstado() {
	     boolean result= DaoFactory.getEstado().delete(DaoFactory.getEstado().findById(Integer.parseInt(id)));
	    if(result)
	      throw new RuntimeException("Delete: Estado with " + id +  " not found");
	  }
	  
	  private Response putAndGetResponse(Estado estado) {
		    Response res;
		    Estado est= DaoFactory.getEstado().findById(estado.getId());
		    if(null != est ) {
		      res = Response.noContent().build();
		    } else {
		      res = Response.created(uriInfo.getAbsolutePath()).build();
		    }
		    DaoFactory.getEstado().create(estado);
		    //TodoDao.instance.getModel().put(todo.getId(), todo);
		    return res;
		  }
		  
}
